import {Injectable} from '@angular/core';
import {HttpClient} from '@angular/common/http';
import {NzMessageService} from 'ng-zorro-antd/message';

interface Company {
  comName: string; // 公司名称
  comLogo: string; // 公司logo
  comAddress: string; // 公司地址
  comContant: string; // 公司联系人
  comMail: string; // 公司联系邮箱
  comDesc: string; // 公司简介
  comPhone: string; // 公司电话
  contant: string; // 企业法人
  orgCode: string; // 组织机构代码
  identityCode: string; // 法人身份证号码
}

interface App {
  devId: string; // 开发者ID
  appName: string; // 应用名称
  appLogo: string; // 应用图标
  appInfo: string; // 应用介绍
  rate: string; // 支付通道比例
  divideRate: string; // 分成比例
}

interface Data {
  date: string; // 日期
  productId: string; // 应用id
  registerCount: number; // 注册数
  rechargeAmount: number; // 充值金额
}

interface Partner {
  userName: string; // 用户名
  passWord: string; // 密码
  realName: string; // 真实姓名
  phone: string; // 手机号码
  productIds: any; // 产品ID（多个逗号隔开）
}

@Injectable({
  providedIn: 'root'
})
export class CooperationService {
  serviceUrl = {
    // 企业
    companyList: '/developer/list', // 企业列表
    companyAdd: '/developer/save', // 添加企业
    companyUpdate: '/developer/update', // 修改企业
    companyDetail: '/developer/details', // 企业详情
    // 应用
    appList: '/product/list', // 应用列表
    appAdd: '/product/save', // 添加应用
    appUpdate: '/product/update', // 修改应用
    appDetail: '/product/save', // 应用详情
    // 数据
    dataList: '/record/list', // 数据列表
    dataAdd: '/record/save', // 添加
    dataUpdate: '/record/update', // 修改
    // 合作伙伴
    partnerList: '/partner/list', // 合作伙伴列表
    partnerAdd: '/partner/save', // 添加
    partnerUpdate: '/partner/update', // 修改
    resetPassword: '/partner/originalPwd', // 重置密码
    // 文件上传
    fileUpload: '/common/upload/file',
  };

  constructor(
    private httpClient: HttpClient,
    private nzMessage: NzMessageService,
  ) {
  }

  /**
   * 获取企业列表
   * @param page 页码
   * @param pageSize 分页大小
   * @param name 名称
   */
  getCompany(page: number, pageSize: number, name: string) {
    return this.httpPost(this.serviceUrl.companyList, {page, pageSize, name});
  }

  /**
   * 添加或修改企业
   */
  addOrModifyCompany(body: Company, isAdd = true) {
    return this.httpPost(isAdd ? this.serviceUrl.companyAdd : this.serviceUrl.companyUpdate, body);
  }

  /**
   * 删除
   */
  deleteCompany(id: any) {
    return this.httpPost(this.serviceUrl.companyUpdate, {id, status: 1});
  }

  /**
   * 获取应用列表
   * @param page 页码
   * @param pageSize 分页大小
   * @param name 名称
   */
  getApp(page: number, pageSize: number, name: string) {
    return this.httpPost(this.serviceUrl.appList, {page, pageSize, name});
  }

  /**
   * 添加或修改应用
   */
  addOrModifyApp(body: App, isAdd = true) {
    return this.httpPost(isAdd ? this.serviceUrl.appAdd : this.serviceUrl.appUpdate, body);
  }

  /**
   * 删除应用
   */
  deleteApp(id: any) {
    return this.httpPost(this.serviceUrl.appUpdate, {id, status: 1});
  }

  /**
   * 获取数据列表
   * @param page 页码
   * @param pageSize 分页大小
   * @param productId 应用id
   * @param beginTime 开始时间
   * @param endTime 结束时间
   */
  getData(page: number, pageSize: number, productId: string, beginTime: string, endTime: string) {
    return this.httpPost(this.serviceUrl.dataList, {page, pageSize, productId, beginTime, endTime});
  }

  /**
   * 添加或修改数据
   */
  addOrModifyData(body: Data, isAdd = true) {
    return this.httpPost(isAdd ? this.serviceUrl.dataAdd : this.serviceUrl.dataUpdate, {recordList: [body]});
  }

  /**
   * 批量添加数据
   */
  addMultipleData(body: any) {
    return this.httpPost(this.serviceUrl.dataAdd, body);
  }

  /**
   * 删除数据
   */
  deleteData(id: any) {
    return this.httpPost(this.serviceUrl.dataUpdate, {id, status: 1});
  }

  /**
   * 获取合作伙伴列表
   * @param page 页码
   * @param pageSize 分页大小
   * @param name 用户名
   */
  getPartner(page: number, pageSize: number, name: string) {
    return this.httpPost(this.serviceUrl.partnerList, {page, pageSize, name});
  }

  /**
   * 添加或修改合伙人
   */
  addOrModifyPartner(body: Partner, isAdd = true) {
    return this.httpPost(isAdd ? this.serviceUrl.partnerAdd : this.serviceUrl.partnerUpdate, {
      ...body,
      productIds: body.productIds.join(',')
    });
  }

  /**
   * 删除合伙人
   */
  deletePartner(id: any) {
    return this.httpPost(this.serviceUrl.partnerUpdate, {id, status: 1});
  }

  /**
   * 重置密码
   */
  resetPassword(id: any, passWord: any) {
    return this.httpPost(this.serviceUrl.resetPassword, {id, passWord});
  }


  formatTime(date: any, type: 'date' | 'dateTime' | 'time') {
    if (!date || (typeof date) === 'string') {
      return date || '';
    }
    let result = '';
    switch (type) {
      case 'date':
        // @ts-ignore
        result = date.toISOString().match(/\d{4}-\d{2}-\d{2}/)[0];
        break;
      case 'dateTime':
        // @ts-ignore
        result = date.toISOString().match(/\d{4}-\d{2}-\d{2}/)[0] + ' ' + date.toString().match(/\d{2}:\d{2}:\d{2}/)[0];
        break;
      case 'time':
        // @ts-ignore
        result = date.toString().match(/\d{2}:\d{2}:\d{2}/)[0];
        break;
    }
    return result;
  }

  httpGet(url: string, params: any) {
    return this.httpClient.get(url, {params}).toPromise().then((res: any) => {
      if (res.code !== 0) {
        this.nzMessage.error(res.message);
      }
      return res;
    }).catch(err => {
      this.nzMessage.error(err);
    });
  }

  httpPost(url: string, body: any) {
    return this.httpClient.post(url, body).toPromise().then((res: any) => {
      if (res.code !== 0) {
        this.nzMessage.error(res.message);
      }
      return res;
    }).catch(err => {
      this.nzMessage.error(err);
    });
  }

}
